package com.fz.us.admin.company.files;

import com.fz.us.admin.base.utils.LogUtil;
import com.fz.us.admin.company.entity.BaseFlowEntity;
import com.google.common.collect.Maps;


import org.hibernate.SessionFactory;
import org.hibernate.persister.entity.AbstractEntityPersister;

import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.Arrays;

import java.util.Map;
import java.util.Set;


public class WorkflowUtils {



    //取表，实体
    public static Map<String,Object> initMappings(SessionFactory sessionFactory){
        Map<String,Object> mappings = Maps.newHashMap();
//            idMappings = new HashMap<String, String>();
        Map metaMap = sessionFactory.getAllClassMetadata();
        for (String key : (Set<String>) metaMap.keySet()) {
            AbstractEntityPersister classMetadata = (AbstractEntityPersister) metaMap
                    .get(key);
            String tableName = classMetadata.getTableName().toLowerCase();
            int index = tableName.indexOf(".");
            if (index >= 0) {
                tableName = tableName.substring(index + 1);
            }
            String className = classMetadata.getEntityMetamodel().getName();
            String idName = classMetadata.getIdentifierColumnNames()[0];
            //根据表名返回实体名
            mappings.put(tableName, className);
            //根据实体返回表名
//                idMappings.put(className, idName);
        }
        return mappings;
    }

    /**
     * 根据实体类获得模块的名字
     * @param entity
     * @return
     */
    public static String getModularName(BaseFlowEntity entity){
        if(entity == null){
            return null;
        }
        String[] manage ={"notice","schedule","dispatch","receive","meetingleave","meetingsign","meetinguse","registe","meetingrecord","taskcontrol","taskback",
                "qualifications","seal","worklog","car","oil","oilquery","contract","purchase","assetuse","usedetail","assetscrap","reception","carconfig","qualificationsdict"};
        String[] party ={"strongbig","selectionnotice","selectionapply",
                "selectionspeech","selectionpublicity","selectionissued","activitymanager",
                "moneymanager","moneyManagerdetail","moneyavg","moneyavgdetail","letterregister",
                "annualbudget","annualbudgetdetail","rebateactivity","rebateactivitydetail","partymoney"};
        String[] finance ={"finance","calculationyear","modifyyear","newsmonth","financeyear",
                "financialanalysis","workplan","auditnotice","auditfirst","auditlast","auditedit","auditanswer",
                "expend"};
        String className = entity.getClass().getName().toLowerCase();
        className =  className.substring(className.lastIndexOf(".")+1);
      //  LogUtil.info("className:"+className);
        if(Arrays.asList(manage).contains(className)){
            return "行政管理";
        }else if(Arrays.asList(party).contains(className)){
            return "党政管理";
        }else if(Arrays.asList(finance).contains(className)){
            return "财务管理";
        }else{
            return "人事管理";
        }
    }


    public static boolean httpDownload(String httpUrl,String saveFile){
        // 下载网络文件
        int bytesum = 0;
        int byteread = 0;

        URL url = null;
        try {
            url = new URL(httpUrl);
        } catch (MalformedURLException e1) {
            e1.printStackTrace();
            return false;
        }

        try {
            URLConnection conn = url.openConnection();
            InputStream inStream = conn.getInputStream();
            FileOutputStream fs = new FileOutputStream(saveFile);

            byte[] buffer = new byte[1204];
            while ((byteread = inStream.read(buffer)) != -1) {
                bytesum += byteread;
                System.out.println(bytesum);
                fs.write(buffer, 0, byteread);
            }
            return true;
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return false;
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
    }


}
